package utils
import "fmt"

type FamilyAccount struct{
	//声明必须的字段
	// 声明一个变量key，接受保存用户输入的选项
	key string
	// 声明一个变量，控制是否退出
	loop bool
	//定义账户余额[]
	balance float64
	//每次收支的金额
	money float64
	//每次收支的说明
	note string
	// 记录是否有收支情况
	flag bool
	//收支详情使用字符串记录
	//当有收收支时拼接detailes
	details string
}
// 编写一个工厂模式的构造方法，返回一个*FamilyAccountn实例
func NewFamilyAccount() * FamilyAccount{
	key     : "",
	loop    : true,
	balance : 10000.0,
	moeny   : 0.0,
	note    : "",
	flag    : false,
	details : "收入\t账户金额\t收支金额\t说明",

}

//封装方法调用展示
func (this *FamilyAccount) show {
	fmt.Println("-------当前收入支出明细记录--------")
	if this.flag {
		fmt.Println(this.details)
	}else{
		fmt.Println("没有任何收入来一笔吧")
	}
}
//封装方法调用收入
func (this *FamilyAccount) income {
	fmt.Println("本次收入金额：")
	fmt.Scanln(&this.money)
	this.balance += this.money // 修改账户余额
	fmt.Println("本次的收入说明：")
	fmt.Scanln(&this.note)
	//拼接字符串
	this.details += fmt.Sprintf("\n收入\t%v\t%v\t%v",this.balance, this.money, this.note)
	this.flag = true
}
//封装方法调用支出
func (this *FamilyAccount) pay {
	fmt.Println("本次支出金额")
	fmt.Scanln(&this.money)
	if this.money > this.balance {
		fmt.Println("余额不足")
		//break
	}
	this.balance -= this.money
	fmt.Println("本次支出说明:")
	fmt.Scanln(&this.note)
	//拼接字符串
	this.details += fmt.Sprintf("\n支出\t%v\t%v\t%v",this.balance, this.money, this.note)
	this.flag = true
}
//封装方法调用退出
func (this *FamilyAccount) out {
	fmt.Println("真的要退出吗？确认输入y，否则输入n")
	this.choice := ""
	for {
		fmt.Scanln(&this.choice)
		if this.choice == "y" || this.choice == "n" {
			//break
		}
		fmt.Println("输入有误请重新输入y/n")
	}

	if this.choice == "y" {
		this.loop = false
	}
}

	// 显示主菜单
func (this *FamilyAccount) mainMenu {
	for {
		fmt.Println("\n--------------家庭收支记账软件-----------------")
		fmt.Println("      1 收支明细   ")
		fmt.Println("      2 登记收入   ")
		fmt.Println("      3 登记支出   ")
		fmt.Println("      4 退出软件   ")
		fmt.Println("请选择(1-4):  ")

		fmt.Scanln(&this.key)
		// 判断用户输入选项显示内容
		switch this.key {
			case "1":
				this.show()
			case "2":
				this.income()
			case "3":
				this.pay()
			case "4":
				this.out()
			default :
				fmt.Println("请输入正确的选项...")
		}

		if !this.loop {
			break
		}
	}
	fmt.Println("你退出家庭记账软件的使用...")
}
	
}